package thread;

/**
 * @Author zhangxuhui
 * @Date 2023/12/21
 * @email zxh_1633@163.com
 */
class Head{
    private Head(){}
    private static Head instance;

    public static /*synchronized 方法锁粒度太大，效率低。*/ Head getInstance(){
        //第一层检测，提升效率，实例不为null时直接返回。
        if(instance == null){
            //synchronized代码块保证一个线程执行完，另一个线程才能获取锁执行。
            synchronized (Head.class){
                //第二层检测，为null时才创建。
                if(instance == null){
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    instance = new Head();
                }
            }
        }
        return instance;
    }
}


public class DCLTest {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(()->{
                    System.out.println(Head.getInstance().hashCode());
            }).start();
        }
    }
}
